package homework.day01;

import java.util.Random;
import java.util.Scanner;

/**
 * 提高题
 * 生成一个4位验证码(数字和字母的组合)
 * 然后输出到控制台并提示用户输入该验证码，只要用户输入正确(无论大小写都算)，
 * 就输出:验证码正确，否则输出:验证码错误
 * <p>
 * <p>
 * 验证码如何生成?
 * 思路导向填空:
 * 1:要先确定生成的内容范围(列出所有可以出现的字符):
 * <p>
 * 2:先思考如何生成其中的一个字符呢？
 * 2.1:确定怎么保存这些可以出现的字符:
 * <p>
 * 2.2:怎么能随机抽选一个
 * <p>
 * 3:既然可以生成一个，如何做到生成4个或更多个?
 * <p>
 * 4:怎么在生成这些字符的过程中将他们组成一个字符串?
 * <p>
 * 5:获取到用户输入的字符串后怎么与之比较,要利用到哪些字符串操作?
 *
 * @author Xiloer
 */
public class Test06 {
    public static void main(String[] args) {
        //方法一:
        //把大小写字母及0~9的数字都放到一个char数组
        char[] arr = new char[62];
        for (int i = 0; i < arr.length; i++) {
            if (i < 10) {
                arr[i] = (char) (i + 48);
            } else if (i < 36) {
                arr[i] = (char) (i + 55);
            } else {
                arr[i] = (char) (i + 61);
            }
        }
        Random rd = new Random();
        String code = "";
        //生成随机索引组成随机验证码
        for (int i = 0; i < 4; i++) {
            int rdNum = rd.nextInt(arr.length);
            code = code + arr[rdNum];
        }
        Scanner sc = new Scanner(System.in);
        //循环输入验证过程, 直到用户输入正确
        while (true) {
            System.out.println("验证码如下:" + code);
            System.out.println("请输入验证码(不要求大小写):");
            String input = sc.nextLine();
            //对输入的验证码进行判断
            if (code.equalsIgnoreCase(input)) {
                System.out.println("验证码输入正确");
                break;
            } else {
                System.out.println("验证码输入错误, 请重新输入");
                System.out.println(" ");
            }
        }
        //方法二:
        /*
        //【创建一个字符串, 输入验证码可能会用到的字符】
        String line = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        //【创建一个字符串code用于装后面随机生成的验证码】
        String code = "";

        //【新建一个random对象】
        Random random = new Random();

        //【用循环生成四个随机索引, 利用索引去抽取字符串中对应的字符】
        for (int i = 0; i < 4; i++) {
            //【生成随机索引】
            int index = random.nextInt(line.length());
            //【用charAt方法根据随机索引抽取索引位置的字符】
            char c = line.charAt(index);
            //【将字符放入字符串中组成验证码】
            code += c;
        }
        //【打印验证码】
        System.out.println("验证码:" + code);

        //【在控制台提示输入验证码】
        System.out.println("请输入验证码:");

        //【生成scanner对象】
        Scanner scanner = new Scanner(System.in);

        //【使用scanner.nextLine()在控制台中手动输入验证码到input】
        String input = scanner.nextLine();

        //【对比验证码与用户输入验证码是否一致】
        if (code.equalsIgnoreCase(input)) {
            //【如果一致, 打印验证成功】
            System.out.println("验证成功!");
        } else {
            //【如果不一致, 打印验证失败】
            System.out.println("验证失败!");
        }
         */
    }

}

/*
		提示代码:
		需要用到的语句，尝试按照正确顺序将下列代码并放在main方法中完成需求，
		并在注释中标注每句话的作用，

		//【在这里标注该句代码意义】
		String line = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

		//【在这里标注该句代码意义】
		String code = "";

		//【在这里标注该句代码意义】
		Random random = new Random();

		//【在这里标注该句代码意义】
		for(int i=0;i<4;i++) {

		}
		//【在这里标注该句代码意义】
		char c = line.charAt(index);

		//【在这里标注该句代码意义】
		int index = random.nextInt(line.length());

		//【在这里标注该句代码意义】
		code+=c;

		//【在这里标注该句代码意义】
		System.out.println("请输入验证码:");

		//【在这里标注该句代码意义】
		Scanner scanner = new Scanner(System.in);

		//【在这里标注该句代码意义】
		if(code.equalsIgnoreCase(input)){

		}else{

		}

		//【在这里标注该句代码意义】
		System.out.println("验证成功!");

		//【在这里标注该句代码意义】
		System.out.println("验证失败!");

		//【在这里标注该句代码意义】
		String input = scanner.nextLine();

		//【在这里标注该句代码意义】
		System.out.println("验证码:"+code);
 */




